Laboratorio 2011-04

 

Esercizio 01

Si realizzi, in linguaggio C, in ambiente Unix/Linux, un programma in grado di visitare un albero di direttori visualizzandone (a video) il contenuto (in termini di sottodirettori e file).

 

Esercizio 02

Si implementi, in linguaggio C, in ambiente Unix/Linux, un programma in grado di duplicare una albero di direttori (i.e., un programma che realizzi il comando unixcp –R”).

Il programma riceve sulla riga di comando due stringhe rappresentanti il pathname completo (path+nome) di due direttori.

Il programma replica il contenuto del primo direttorio (esistente) nel secondo (inesistente).

Per duplicazione si intende una copia del primo direttorio nel secondo, inclusi tutti i sottodirettori e tutti i file, ottenendo al termine del procedimento la stessa struttura gerarchica ad albero e gli stessi contenuti.

 

Esercizio 03

Due direttori si definiscono equivalenti se contengono le stesse informazioni, ovvero se, ricorsivamente, hanno lo stesso contenuto.

Si realizzi, in linguaggio C, in ambiente Unix/Linux, un programma concorrente in grado di determinare l’equivalenza di due direttori.

Il programma deve:

§         ricevere sulla riga di comando il pathname completo (path+nome) di due direttori

§         duplicarsi in due processi, in modo che il padre visiti ricorsivamente uno dei due direttorio e il figlio visiti ricorsivamente l’altro direttorio

§         i due processi (padre e figlio) devono sincronizzarsi a ogni file/direttorio rintracciato nella struttura gerarchica visitata per verificare che esso sia lo stesso. In caso affermativo continuano il procedimento. In caso negativo segnalano l’incongruenza e terminano.

Si limiti il confronto di equivalenza ai soli nomi dei file/direttori (non ci si occupi della dimensione, dei diritti di accesso, etc.).

 

Suggerimento

Per ogni direttorio/file rintracciato nella struttura, uno dei due processi trasferisce su una pipe all’altro processo il nome del direttorio/file trovato e quindi aspetta su un semaforo che l’altro processo verifichi le informazioni trasferite e lo svegli.